#pragma once
#include "gtest/gtest.h"

#include "Utility/Algebra/Vector3D.h"

#include "TestData/model/QuadShell_OneEle.hpp"

#include "DBManager/IService/Input/Material/IIsotropicMaterialService.h"
#include "DBManager/IService/Input/Node/INodeService.h"

#include "SGFem/ElementCalculator/Common/ElementTools.hpp"
#include "SGFem/ElementCalculator/Factory/ElementCalculatorFactory.h"
#include "SGFem/ShellSecCalculator/ShellSectionParser1.h"
#include "../Tria3ShellCalculator.h"

using namespace SG::Algebra;
using SG::DataStructure::Common::Real;
using namespace SG::DataStructure::FEM;

using namespace SG::FEMSolver::Element;
using SG::FEMSolver::Element::ShellSectionParser;
using SG::FEMSolver::Element::ShellSectionParser;

// 将 ElementCalculatorFactory 的 Register和生成对象测试放置在具体单元类型计算中
TEST (ElementCalculatorFactoryTest, Tria3ShellCalculator)
{
    ElementCalculatorFactory::Register (ElementTypes::ELETYPE_ShellTria3, Tria3ShellCalculator::Create);

    // Test
    auto CalculatorPtr = ElementCalculatorFactory::Create (ElementTypes::ELETYPE_ShellTria3);

    // Target data
    auto beamCalctor = dynamic_cast<Tria3ShellCalculator*> (CalculatorPtr.get ());

    // Test
    ASSERT_TRUE (0 != beamCalctor);
}

class Tria3ShellCalculatorTest : public ::testing::Test
{
  public:
    virtual void SetUp () override
    {
        localCoord = Matrix (3,
                             2,
                             {
                                 0,
                                 0,
                                 1,
                                 0,
                                 0,
                                 1,
                             });

        IsotropicMaterial mat;
        mat.m_id = 1;
        mat.m_E  = 30.0;
        mat.m_nu = 0.3;
        mat.m_G  = 1.153846153846154e+01;
        materialConst.m_t = 0.5;
        // ShellSectionParser::CalcCommonCm (mat, 1.0, _OUT materialConst);
        // ShellSectionParser::CalcCommonCb (mat, 1.0, _OUT materialConst);
        // ShellSectionParser::CalcCommonCs (mat, 5.0 / 6.0, _OUT materialConst);
    }

  protected:
    Matrix                   localCoord;
    ShellSectionProp1 materialConst;
};

// 刚度阵测试
TEST_F (Tria3ShellCalculatorTest, Tria3ShellCalculator)
{
    GTEST_SKIP ();  // 单元板部分修改成 TMT
    // Input Data
    Matrix T (3, 3, { 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0 });

    // Test data
    Tria3ShellCalculator eleCalculator;
    eleCalculator.Initialize (ElementTypes::ELETYPE_ShellTria3);
    Matrix keTest;
    Matrix Tele (18, 18);
    Tele.BlockFill (0, 0, T);
    Tele.BlockFill (3, 3, T);
    Tele.BlockFill (6, 6, T);
    Tele.BlockFill (9, 9, T);
    Tele.BlockFill (12, 12, T);
    Tele.BlockFill (15, 15, T);
    eleCalculator.ComputeStiffness (localCoord, materialConst, 0.0 /*zOff*/, Tele, _OUT keTest);

    // Target data
    Matrix keTarget (
        18,
        18,
        {
            1.1133585e+01,  5.3499313e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  -4.8076923e-03, -8.2417582e+00, -2.8774038e+00,
            0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  -4.8076923e-03, -2.8918269e+00, -2.4725275e+00, 0.0000000e+00,  0.0000000e+00,
            0.0000000e+00,  -4.8076923e-03, 5.3499313e+00,  1.1133585e+01,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  4.8076923e-03,
            -2.4725275e+00, -2.8918269e+00, 0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  4.8076923e-03,  -2.8774038e+00, -8.2417582e+00,
            0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  4.8076923e-03,  0.0000000e+00,  0.0000000e+00,  4.8076923e+00,  1.2019231e+00,
            -1.2019231e+00, 0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  -2.4038462e+00, 0.0000000e+00,  -1.2019231e+00, 0.0000000e+00,
            0.0000000e+00,  0.0000000e+00,  -2.4038462e+00, 1.2019231e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,
            1.2019231e+00,  6.3244048e-01,  -3.1192766e-01, 0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  -4.0064103e-01, -6.0096154e-02,
            -1.4880952e-01, 0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  -8.0128205e-01, 2.2893773e-01,  6.0096154e-02,  0.0000000e+00,
            0.0000000e+00,  0.0000000e+00,  -1.2019231e+00, -3.1192766e-01, 6.3244048e-01,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,
            8.0128205e-01,  6.0096154e-02,  2.2893773e-01,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  4.0064103e-01,  -1.4880952e-01,
            -6.0096154e-02, 0.0000000e+00,  -4.8076923e-03, 4.8076923e-03,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  3.2051571e-03,
            0.0000000e+00,  -4.8076923e-03, 0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  3.2051282e-03,  4.8076923e-03,  0.0000000e+00,
            0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  3.2051282e-03,  -8.2417582e+00, -2.4725275e+00, 0.0000000e+00,  0.0000000e+00,
            0.0000000e+00,  0.0000000e+00,  8.2417582e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,
            0.0000000e+00,  2.4725275e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  -2.8774038e+00, -2.8918269e+00,
            0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  -4.8076923e-03, 0.0000000e+00,  2.8918269e+00,  0.0000000e+00,  0.0000000e+00,
            0.0000000e+00,  -4.8076923e-03, 2.8774038e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  -4.8076923e-03,
            0.0000000e+00,  0.0000000e+00,  -2.4038462e+00, -4.0064103e-01, 8.0128205e-01,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,
            2.4038462e+00,  4.0064103e-01,  1.2019231e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,
            4.0064103e-01,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  -6.0096154e-02, 6.0096154e-02,  0.0000000e+00,
            0.0000000e+00,  0.0000000e+00,  4.0064103e-01,  2.6041667e-01,  2.0032051e-01,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,
            -4.0064103e-01, 2.0032051e-01,  1.4022436e-01,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  -1.2019231e+00, -1.4880952e-01,
            2.2893773e-01,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  1.2019231e+00,  2.0032051e-01,  7.7266484e-01,  0.0000000e+00,
            0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  -5.1510989e-02, 2.0032051e-01,  0.0000000e+00,  -4.8076923e-03, 4.8076923e-03,
            0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  3.2051282e-03,  0.0000000e+00,  -4.8076923e-03, 0.0000000e+00,  0.0000000e+00,
            0.0000000e+00,  3.2051571e-03,  4.8076923e-03,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  3.2051282e-03,
            -2.8918269e+00, -2.8774038e+00, 0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  4.8076923e-03,  0.0000000e+00,  2.8774038e+00,
            0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  4.8076923e-03,  2.8918269e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,
            0.0000000e+00,  4.8076923e-03,  -2.4725275e+00, -8.2417582e+00, 0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,
            2.4725275e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  8.2417582e+00,
            0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  -2.4038462e+00, -8.0128205e-01,
            4.0064103e-01,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  -4.0064103e-01, 0.0000000e+00,  0.0000000e+00,
            0.0000000e+00,  0.0000000e+00,  2.4038462e+00,  -1.2019231e+00, -4.0064103e-01, 0.0000000e+00,  0.0000000e+00,  0.0000000e+00,
            1.2019231e+00,  2.2893773e-01,  -1.4880952e-01, 0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  2.0032051e-01,
            -5.1510989e-02, 0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  -1.2019231e+00, 7.7266484e-01,  2.0032051e-01,  0.0000000e+00,
            0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  6.0096154e-02,  -6.0096154e-02, 0.0000000e+00,  0.0000000e+00,  0.0000000e+00,
            4.0064103e-01,  1.4022436e-01,  2.0032051e-01,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  -4.0064103e-01, 2.0032051e-01,
            2.6041667e-01,  0.0000000e+00,  -4.8076923e-03, 4.8076923e-03,  0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  3.2051282e-03,
            0.0000000e+00,  -4.8076923e-03, 0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  3.2051282e-03,  4.8076923e-03,  0.0000000e+00,
            0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  3.2051571e-03,

        });

    ASSERT_TRUE (keTest == keTarget);
}

// 质量阵测试
TEST_F (Tria3ShellCalculatorTest, ComputeMass)
{
    Matrix                   T, localCoord;
    ShellSectionProp1 secConstant;
    Matrix                   LumpedMTest (18, 18);
    Matrix                   CoupledTest (18, 18);

    // Input Data
    std::vector<Point> points (3);
    points[0]  = Point{ 0.0, 3.0, 4.0 };
    points[1]  = Point{ 7.0, 0.0, 0.0 };
    points[2]  = Point{ 0.0, 0.0, 0.0 };
    Real zoffs = 2.0;
    Point origin;
    ElementTools::computePlaneCoordTrans (points, _OUT T, origin, _OUT localCoord);
    secConstant.m_nsm = 3.4;
    secConstant.m_t   = 2.0;
    Matrix Tele (18, 18);
    for (std::size_t iNode = 0; iNode < 3; ++iNode)
    {
        Tele.BlockFill (iNode * 6, iNode * 6, T);
        Tele.BlockFill (iNode * 6 + 3, iNode * 6 + 3, T);
    }

    Tria3ShellCalculator eleCalculator;
    Real area = (localCoord (0, 0) * (localCoord (1, 1) - localCoord (2, 1)) + localCoord (1, 0) * (localCoord (2, 1) - localCoord (0, 1))
                 + localCoord (2, 0) * (localCoord (0, 1) - localCoord (1, 1)))
                / 2.0;
    eleCalculator.ComputeMass (area, secConstant, zoffs, _OUT CoupledTest, _OUT LumpedMTest);
    LumpedMTest = Tele.Transpose () * LumpedMTest * Tele;
    CoupledTest = Tele.Transpose () * CoupledTest * Tele;

    // Target data
    Matrix LumpedMTarget (
        18,
        18,
        {
            1.98333334E+01, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 1.98333334E+01, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 1.98333334E+01, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 1.98333334E+01, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 1.98333334E+01, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            1.98333334E+01, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 1.98333334E+01, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 1.98333334E+01,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 1.98333334E+01, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
            0.00000000E+00, 0.00000000E+00, 0.00000000E+00, 0.00000000E+00,
        });

    Matrix CoupledTarget (
        18,
        18,
        {
            9.91666671E+00,  -4.44089210E-16, 8.88178420E-16,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  4.95833336E+00,
            -2.22044605E-16, 4.44089210E-16,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  4.95833336E+00,  -2.22044605E-16,
            4.44089210E-16,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  -4.44089210E-16, 9.91666671E+00,  8.88178420E-16,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  4.95833336E+00,  4.44089210E-16,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  4.95833336E+00,  4.44089210E-16,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  8.88178420E-16,  8.88178420E-16,  9.91666671E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            4.44089210E-16,  4.44089210E-16,  4.95833336E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  4.44089210E-16,
            4.44089210E-16,  4.95833336E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  4.95833336E+00,  0.00000000E+00,  4.44089210E-16,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  9.91666671E+00,  -4.44089210E-16, 8.88178420E-16,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  4.95833336E+00,  -2.22044605E-16, 4.44089210E-16,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            -2.22044605E-16, 4.95833336E+00,  4.44089210E-16,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  4.44089210E-16,
            9.91666671E+00,  8.88178420E-16,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  4.95833336E+00,
            4.44089210E-16,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  4.44089210E-16,  4.44089210E-16,  4.95833336E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  8.88178420E-16,  8.88178420E-16,  9.91666671E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  4.44089210E-16,  4.44089210E-16,  4.95833336E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  4.95833336E+00,
            0.00000000E+00,  4.44089210E-16,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  4.95833336E+00,  0.00000000E+00,
            4.44089210E-16,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  9.91666671E+00,  -4.44089210E-16, 8.88178420E-16,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  -2.22044605E-16, 4.95833336E+00,  4.44089210E-16,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  2.22044605E-16,  4.95833336E+00,  4.44089210E-16,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  -4.44089210E-16, 9.91666671E+00,  8.88178420E-16,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            4.44089210E-16,  4.44089210E-16,  4.95833336E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  4.44089210E-16,
            4.44089210E-16,  4.95833336E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  8.88178420E-16,  8.88178420E-16,
            9.91666671E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,  0.00000000E+00,
            0.00000000E+00,  0.00000000E+00,
        });

    // ASSERT_TRUE(LumpedMTest == LumpedMTarget);
    ASSERT_TRUE (CoupledTest == CoupledTarget);
}